package net.gamasoft.sistemadeinventarios.controller;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author dpaniagua.
 *
 */
public class ConexionBD {
	/**
	 * permite habilitar o cerrar la conexion y transacciones
	 * a la base de datos.
	 */
	Connection connection;
	/**
	 * permite crear y ejecutar sentencias sql.
	 */
	Statement statement;
	
	public boolean conectar() {
		try {
			//Cargar el driver de la conexion.
			Class.forName("com.mysql.jdbc.Driver");
			
			String url = "jdbc:mysql://localhost:3306/sistemabancario";
			String user = "root";
			String password = "GIO";
			
			//Realizar la conexion al servidor de la base de datos.
			connection = DriverManager.getConnection(url, user, password);
			//Permite crear las sentencias SQL a partir de la conexion
			statement = connection.createStatement(); 
			//Recuperar la informacion del servidor o la base de datos que se maneje.
			DatabaseMetaData metaData = connection.getMetaData();
			System.out.println("SERVIDOR: " + metaData.getDatabaseProductName());
			System.out.println("VERSION: " + metaData.getDatabaseProductVersion());
			System.out.println("DRIVER: " + metaData.getDriverVersion());
			
			System.out.println("Conexion exitosa");
			return true;
		} catch (ClassNotFoundException e) {
			System.err.println("Error al cargar el driver: " + e.getMessage());
			e.printStackTrace();
			return false;
		} catch (SQLException e) {
			System.err.println("Error al conectarse a la bd: " + e.getMessage());
			e.printStackTrace();
			return false;
		}
	}
	
	public boolean desconectar() {
		//Si la conexion esta abierta
		if (connection != null) {
			try {
				//Cierra la conexion.
				connection.close();
				return true;
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return false;
			}
		} else {
			return true;
		}
	}
	
	/**
	 * Permite ejecutar una sentencia INSERT, UPDATE o DELETE.
	 * @param sql ejecutado
	 * @return true si fue exitoso.
	 */
	public boolean ejecutarSQL(String sql) {
		try {
			statement.execute(sql);
			System.out.println("SENTENCIA EJECUTADA: " + sql);
			return true;
		} catch (SQLException e) {
			System.err.println("Error al ejecutar la sentencia: " + e.getMessage() + "\n" + sql);
			return false;
		}
	}
	
	/**
	 * Permite ejecutar una sentencia SELECT y
	 * recuperar los datos de la consulta
	 * @param sql ejecutado
	 * @return rs con los datos de la consulta
	 */
	public ResultSet ejecutarSelect(String sql) {
		try {
			ResultSet rs = statement.executeQuery(sql);
			System.out.println("SENTENCIA EJECUTADA: " + sql);
			return rs;
		} catch (SQLException e) {
			System.err.println("Error al ejecutar la sentencia: " + e.getMessage() + "\n" + sql);
			return null;
		}
	}
}
